package br.com.jsfprimefaces.managerBean;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Serializable;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import br.com.jsfprimefaces.dao.DuracaoDAO;
import br.com.jsfprimefaces.dao.FilmeDAO;
import br.com.jsfprimefaces.model.Duracao;
import br.com.jsfprimefaces.model.Filme;

@ManagedBean(name = "MenuMB")
@ViewScoped 

public class MenuMbean implements Serializable {

	private static final long serialVersionUID = 1L;

	private int id;
	private String nome;
	private String nomeOriginal;
	private String genero;
	private int duracao;
	private String status;
	private int ano;
	private List<Filme> filme;
	private Filme movie;
	private int total;
	
	 
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public Filme getMovie() {
		if(movie == null){
			movie = new Filme();
		}
		return movie;
	}

	public void setMovie(Filme movie) {
		this.movie = movie;
	}

	public List<Filme> getFilme() {
		return filme;
	}

	public void setFilme(List<Filme> filme) {
		this.filme = filme;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		
		this.nome = nome.toUpperCase();
	}

	public String getGenero() {
		return genero;
	}

	public void setGenero(String genero) {
		this.genero = genero.toUpperCase();
	}

	public int getDuracao() {
		return duracao;
	}

	public void setDuracao(int duracao) {
		this.duracao = duracao;
	}

	public String getStatus() {
		return status;
	}

	public void setStatus(String status) {
		this.status = status.toUpperCase();
	}

	public int getAno() {
		return ano;
	}

	public void setAno(int ano) {
		this.ano = ano;
	}

	public String getNomeOriginal() {
		return nomeOriginal;
	}

	public void setNomeOriginal(String nomeOriginal) {
		this.nomeOriginal = nomeOriginal.toUpperCase();
	}
	
	public int getTotal() {
		return total;
	}

	public void setTotal(int total) {
		this.total = total;
	}

	public String carregaAdicionar() {
		setNullAll();
		return "/page/adicionar.xhtml";
	}

	public String carregaExibir() {
		exibe();
		return "/page/exibe.xhtml";
	}

	public String carregaBuscar() {
		setNullAll();
		return "/page/pesquisar.xhtml";
	}

	public String voltar() {
		setNullAll();
		System.out.println(" - /voltar -");
		return "/page/menu.xhtml";
	}
	
	public String menu() {
		setNullAll();
		System.out.println(" - /index -");
		return "/index.xhtml";
	}	
	
	public String cadastra() {
		Filme filme = new Filme();

		filme.setNome(nome);
		filme.setNomeOriginal(nomeOriginal);
		filme.setGenero(genero);
		filme.setDuracao(duracao);
		filme.setAno(ano);
		filme.setStatus(status);

		FilmeDAO filmeDAO = new FilmeDAO();
		filmeDAO.insert(filme);
		System.out.println(" - INSERT FEITO COM SUCESSO! - ");
		return "/page/menu.xhtml";
	}

	public List<Filme> exibe() {
		FilmeDAO filmeDAO = new FilmeDAO();
		filme = filmeDAO.searchAll();
		
		/*
		int i=0;
		for(Filme filmes: filme){
			System.out.println("----\n");
			System.out.println("ID["+i+"] = \""+filmes.getId()+"\";");
			System.out.println("NOME["+i+"] = \""+filmes.getNome()+"\";");
			System.out.println("GENERO["+i+"] = \""+filmes.getGenero()+"\";");
			System.out.println("DURACAO["+i+"] = \""+filmes.getDuracao()+"\";");
			System.out.println("STATUS["+i+"] = \""+filmes.getStatus()+"\";");
			System.out.println("ANO["+i+"] = \""+filmes.getAno()+"\";");
			/*System.out.println("\n----");
			i++;
		}
		*/
		
		return filme;
	}

	public List<Filme> edita(){
		
		System.out.println(" /editar");
		System.out.println("----------");
		System.out.println("Nome : " + movie.getNome());
		System.out.println("Nome Original: " + movie.getNomeOriginal());
		System.out.println("Genero : " + movie.getGenero());
		System.out.println("Duracao : " + movie.getDuracao());
		System.out.println("Ano : " + movie.getAno());
		System.out.println("Status : " + movie.getStatus());
		System.out.println("----------\n");
		
		Filme filmes = new Filme();

		filmes.setId(movie.getId());
		filmes.setNome(movie.getNome());
		filmes.setNomeOriginal(movie.getNomeOriginal());
		filmes.setGenero(movie.getGenero());
		filmes.setDuracao(movie.getDuracao());
		filmes.setAno(movie.getAno());
		filmes.setStatus(movie.getStatus());

		FilmeDAO filmeDAO = new FilmeDAO();
		filmeDAO.update(filmes);
		System.out.println(" - UPDATE FEITO COM SUCESSO! - ");
		filme =  filmeDAO.searchAll();
		return filme;
	}

	public List<Filme> remove(Filme f) {
		FilmeDAO filmeDAO = new FilmeDAO();
		filmeDAO.delete(f);
		System.out.println(" - DELETE FEITO COM SUCESSO! - ");
		filme = filmeDAO.searchAll();
		return filme;
	}

	public List<Filme> busca(String nome) {
		filme = null;
		if (!(nome.isEmpty())) {
			FilmeDAO filmeDAO = new FilmeDAO();
			filme = filmeDAO.searchByName(nome.toUpperCase());
			return filme;
		}
		
		return null;
	}
	
	/*public List<Filme> buscaId(int id) {
		FilmeDAO filmeDAO = new FilmeDAO();
		filme = filmeDAO.searchById(id);

		return filme;
		return movie;
	}*/
	
	public Filme buscaId(Filme f) {
		FilmeDAO filmeDAO = new FilmeDAO();
		
		movie = new Filme();
		for (Filme m : filmeDAO.searchById(f)) {
			movie.setId(m.getId());
			movie.setNome(m.getNome());
			movie.setNomeOriginal(m.getNomeOriginal());
			movie.setDuracao(m.getDuracao());
			movie.setGenero(m.getGenero());
			movie.setAno(m.getAno());
			movie.setStatus(m.getStatus());
		}
		
		System.out.println("Nome: "+movie.getNome()+"\nObjeto = "+movie);
		
		return movie;
	}
	
	public void setNullAll(){
		nome = "";
		nomeOriginal = "";
		genero = "";
		status = "";
		id = 0;
		duracao = 0;
		ano = 0;
		filme = null;
		movie = null;
	}
	
	public void geraExportacao(){
		String arquivo = "C:/Lista_Filmes.txt";
		
		FilmeDAO filmeDAO = new FilmeDAO();
		filme = filmeDAO.searchAll();
		
		try {

			FileWriter writer = new FileWriter(new File(arquivo));
			PrintWriter pw = new PrintWriter(writer);
			
			pw.println("################## FILMES ##################\n");
			
			for(Filme filmes: filme){
				
				pw.println("\n");
				pw.println("NOME = "+filmes.getNome());
				pw.println("NOME ORIGINAL = "+filmes.getNomeOriginal());
				pw.println("GENERO = " +filmes.getGenero());
				pw.println("DURACAO = " +filmes.getDuracao()+ " MINUTOS");
				pw.println("STATUS = " +filmes.getStatus());
				pw.println("ANO = " +filmes.getAno());
				pw.println("\n\n");
			}
			
			pw.close();
			writer.close();

			Runtime.getRuntime().exec("cmd.exe /C C:/Lista_Filmes.txt");	
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public int duracaoTotal(){

		DuracaoDAO duracaoDAO = new DuracaoDAO();
		
		/*duracaoDAO.searchById();*/
		
		for(Duracao d: duracaoDAO.searchById()){
			duracao = d.getDuracao();
		}
		System.out.println("TEMPO TOTAL: " + duracao);
	
		return duracao;
	}
	
}
